JavaScript 闭包
我们可以定义
function lazy_sum(arr) {
var sum = function () {
return arr.reduce(function (x, y) {
return x + y;
});
}
return sum;
}
这样,返回的结果就是求和函数而不是求和结果。
在闭包中注意循环变量
由于返回的函数并没有立即执行,如下语句会产生难以预料的结果:
function count() {
var arr = [];
for (var i=1; i<=3; i++) {
arr.push(function () {
return i * i;
});
}
return arr;
}
var results = count();
var f1 = results[0];
var f2 = results[1];
var f3 = results[2];
为此我们应该使用 let
。
用闭包封装私有变量
function create_counter(initial) {
var x = initial || 0;
return {
inc: function () {
x += 1;
return x;
}
}
}